package com.jingdianjichi.subject.common.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * 分页返回实体
 */

@Data
public class PageResult<T> implements Serializable {

    /**
     * pageNo=1 和 pageSize=20 时，start 为 1，end 为 20，表示该页显示的是第 1 至第 20 条记录，共 20 条记录。
     */

    //当前请求的页码
    private Integer pageNo = 1;

    //每页显示的数据条数
    private Integer pageSize = 20;

    //总记录数
    private Integer total = 0;

    //总页数
    private Integer totalPages = 0;

    //当前页的数据结果，初始化为空列表
    private List<T> result = Collections.emptyList();

    //当前页第一条记录的索引位置开始第xx条
    private Integer start = 1;

    //当前页最后一条记录的索引位置结束第xx条
    private Integer end = 0;

    //设置当前页的数据结果，并更新总记录数 totalPages
    public void setRecords(List<T> result) {
        this.result = result;
        if (result != null && result.size() > 0) {
            setTotal(result.size());
        }
    }

    public void setTotal(Integer total) {
        this.total = total;
        if (this.pageSize > 0) {
            this.totalPages = (total / this.pageSize) + (total % this.pageSize == 0 ? 0 : 1);
        } else {
            this.totalPages = 0;
        }
        /**
         * pageNo=2 和 pageSize=20 时，start 为 21，end 为 40，表示该页显示的是第 21 至第 40 条记录，共 20 条记录。
         */
        //计算当前页的第一条和最后一条记录的索引位置 start 和 end
        this.start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
        this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
    }

    //设置每页大小
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    //当前请求的页码
    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }
}
